﻿#define _CRT_SECURE_NO_WARNINGS 1
#include"func.h"
using namespace std;

void Student::Init(const char* name, const char* gender, int age)
{
	strcpy(_name, name);
	strcpy(_gender, gender);
	_age = age;
}

void Student::Print()
{
	cout << _name << " " << _gender << " " << _age << endl;
}

//int main()
//{
//	Student s1;
//	s1.Init("张三", "男", 18);
//	s1.Print();
//
//	return 0;
//}

////栈
//class Stack
//{
//public:
//	void push(int x)
//	{
//
//	}
//};
//
////队列
//class Queue
//{
//public:
//	void push(int x)
//	{
//
//	}
//};
//
//// 类中既有成员变量，又有成员函数
//class A1 {
//public:
//	void f1() {}
//private:
//	int _a;
//};
//
//// 类中仅有成员函数
//class A2 {
//public:
//	void f2() {}
//};
//
//// 类中什么都没有---空类
//class A3
//{};

//int main()
//{
//	cout << sizeof(A1) << endl;
//	cout << sizeof(A2) << endl;
//	cout << sizeof(A3) << endl;
//
//	return 0;
//}

//class Date
//{
//public:
//	//原代码
//	void Init(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	//编译器处理后
//	//void Init(Data const* this, int year, int month, int day)
//	//{
//	//	this->_year = year;
//	//	this->_month = month;
//	//	this->_day = day;
//	//}
//
//	//原代码
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}

	//编译器处理后
	//void Print(Data const* this)
	//{
	//	cout << this->_year << "-" << this->_month << "-" << this->_day << endl;
	//}

//	bool operator<(const Date& d)
//	{
//		if (_year > d._year)
//		{
//			return false;
//		}
//		else if(_year == d._year)
//		{
//			if (_month > d._month)
//			{
//				return false;
//			}
//			else if (_month == d._month)
//			{
//				if (_day >= d._day)
//				{
//					return false;
//				}
//			}
//		}
//		return true;
//	}
//
//private:
//	int _year;     // 年
//	int _month;    // 月
//	int _day;      // 日
//};
//
//int main()
//{
//	Date d1, d2;
//	//原代码
//	d1.Init(2022, 1, 11);
//	d2.Init(2022, 1, 11);
//
//	cout << (d1 < d2) << endl;
//
//	//编译器处理后
//	//d1.Init(&d1, 2022, 1, 11);
//	//d2.Init(&d2, 2022, 1, 12);
//
//	//原代码
//	//d1.Print();
//	//d2.Print();
//
//	//编译器处理后
//	//d1.Print(&d1);
//	//d2.Print(&d2);
//	return 0;
//}


//class A
//{
//public:
//	A()
//	{
//		cout << "A()" << endl;
//		_a = 0;
//	}
//private:
//	int _a;
//};
//
//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//
//private:
//	int _year = 2022;
//	int _month = 1;
//	int _day = 1;
//};
//
//int main()
//{
//	Date d1(2023, 3, 5);
//	d1.Print();
//	Date d2(d1);
//	d2.Print();
//
//	return 0;
//}


//class Stack
//{
//public:
//	//构造函数
//	Stack(int capacity = 10)
//	{
//		_a = (int*)malloc(sizeof(int) * capacity);
//		assert(_a);
//		_top = 0;
//		_capacity = capacity;
//	}
//	//不写拷贝构造，编译器调用默认拷贝构造
//		/*
//		Stack(const Stack& st)
//		{
//			_a = st._a;
//			_top = st._top;
//			_capacity = st._capacity;
//		}
//		*/
//		//析构函数
//	~Stack()
//	{
//		cout << "~Stack():" << this << endl;
//		free(_a);
//		_a = nullptr;
//		_top = _capacity = 0;
//	}
//private:
//	int* _a;
//	int _top;
//	int _capacity;
//};
//
//int main()
//{
//	Stack st1(10);
//	Stack st2(st1);
//}


//class Date
//{
//public:
//	//构造函数
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
////private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//bool operator==(const Date& d1, const Date& d2) //避免传值传参调用拷贝构造
//{
//	return d1._year == d2._year &&
//		d1._month == d2._month &&
//		d1._day == d2._day;
//}
//
//
//int main()
//{
//	Date d1(2023, 3, 5);
//	Date d2(2023, 3, 5);
//	Date d3;
//	int ret1 = d2 == d1;
//	int ret2 = d3 == d1;
//}



//class A
//{
//public:
//	// const 修饰 *this
//    // this的类型变成 const A*
//    // 内部不改变成员变量的成员函数
//    // 最好加上const，const对象和普通对象都可以调用
//	void Print() const
//	{
//		cout << _a << endl;
//	}
//
//	void Add(int x)
//	{
//		_a += x;
//	}
//
//private:
//	int _a = 10;
//};
//
//void Func(const A& x)
//{
//	x.Print();
//
//	cout << &x << endl;
//}
//
//int main()
//{
//	A aa;
//	aa.Print();
//
//	Func(aa);
//
//	return 0;
//}

//class Date
//{
//public:
//	Date(int year, int month, int day)
//	{
//		_year = 2000;
//		_year = year;
//		_month = month;
//		_day = day;
//		_month = 12;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};

//class Date
//{
//public:
//	Date(int year, int month, int day)
//		: _year(year)
//		, _month(month)
//		, _day(day)
//	{}
//private:
//	int _year;
//	int _month;
//	int _day;
//};

//class A
//{
//public:
//	//A的构造函数需要传参所以不是默认构造函数
//	A(int a)
//	{
//		_a = a;
//	}
//private:
//	int _a;
//};
//
//class Date
//{
//public:
//	//初始化列表可以认为就是对象成员变量定义的地方
//	Date(int year, int n, int aa)
//		:_n(n)
//		//没有默认构造函数，所以要在初始化列表中初始化
//		,_aa(aa)
//	{
//		_year = year;
//	}
//private:
//	int _year; 
//	const int _n;
//	A _aa;
//};


//class Date
//{
//public:
//	explicit Date(int year)
//		:_year(year)
//	{}
//private:
//	int _year;
//};
//
//
//int main()
//{
//	Date d1(2022); //构造
//	//隐式类型转换
//	Date d2 = 2022;
//}

class A
{
public:
	//声明
	static int K;
};

//定义
int A::K = 10;

int main()
{
	A a;
	cout << a.K << endl;   //通过对象.静态成员来访问
	cout << A::K << endl;  //通过类名.静态成员来访问
	cout << A().K << endl; //通过匿名对象.静态成员来访问

	return 0;
}